home *** CD-ROM | disk | FTP | other *** search
- /*
- * Copyright (C) 1990-1992 by Michael Davidson.
- * All rights reserved.
- *
- * Permission to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice appear in all
- * copies and that both that copyright notice and this permission
- * notice appear in supporting documentation.
- *
- * This software is provided "as is" without express or implied warranty.
- */
-
- #include <stdio.h>
-
- #include "vg.h"
-
- void
- showFiles(
- list_t *filelist
- )
- {
- list_t *f = filelist;
-
- /*
- * find first selected file
- */
- for (f = filelist; f != NULL; f = f->next)
- if (f->flags & 2)
- break;
-
- while (f != NULL)
- {
- switch (showFile(f->name))
- {
- case F_NEXT:
- for (f = f->next; f != NULL; f = f->next)
- if (f->flags & 2)
- break;
- break;
-
- case F_PREV:
- for (f = f->prev; f != NULL; f = f->prev)
- if (f->flags & 2)
- break;
- break;
-
- case F_REDRAW:
- continue;
-
- case F_ESC:
- return;
- }
- }
- }
-
- int
- showFile(
- char *fname
- )
- {
- char iobuf[BUFSIZ*8];
- FILE *fp;
- int r;
-
- if ((fp = fopen(fname, "r")) == NULL)
- return imageError("can't open %s", fname);
-
- setvbuf(fp, iobuf, _IOFBF, BUFSIZ*8);
-
-
- switch (getFileType(fname, fp))
- {
- case F_GIF:
- r = gifRead(fname, fp);
- break;
-
- case F_JPEG:
- r = jpegRead(fname, fp);
- break;
-
- case F_PCD_O:
- case F_PCD_I:
- r = pcdRead(fname, fp);
- break;
-
- default:
- r = imageError("can't determine file type of %s", fname);
- break;
- }
-
- fclose(fp);
-
- return r;
- }
-
- getFileType(
- char *fname,
- FILE *fp
- )
- {
- unsigned char buf[512];
- int n;
-
- if (fread(buf, 1, sizeof(buf), fp) != sizeof(buf))
- return -1;
-
- rewind(fp);
-
- if (strncmp(buf, "GIF8", 4) == 0)
- return F_GIF;
-
- if (strncmp(&buf[128], "GIF8", 4) == 0)
- {
- fseek(fp, 128L, 0);
- return F_GIF;
- }
-
- if (buf[0] == 0xff && buf[1] == 0xd8 && buf[2] == 0xff)
- return F_JPEG;
-
- if (buf[128] == 0xff && buf[129] == 0xd8 && buf[130] == 0xff)
- {
- fseek(fp, 128L, 0);
- return F_JPEG;
- }
-
- if (strcmp(buf, "PCD_OPA") == 0)
- return F_PCD_O;
-
- if (fseek(fp, 2048L, 0) == 0)
- {
- fread(buf, 1, sizeof(buf), fp);
- rewind(fp);
-
- if (strcmp(buf, "PCD_IPI") == 0)
- return F_PCD_I;
- }
-
- return 0;
- }
-